package com.yc.service;

import com.yc.domain.Account;
import com.yc.service.email.EmailStrategy;
import com.yc.service.email.EmailStrategyFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

/**
 * @author zwei
 * @create 2024-08-11 18:59
 */
@Service
@Transactional
public class VelocityTemplateBizImpl {      //开发一个模板引擎  读取模板  并将模板中的数据填充到模板中
    //    @Autowired
//    private VelocityContext context;        // 模板上下文  map
//    @Autowired
//    @Qualifier("depositTemplate")
//    private Template depositTemplate;
//    @Autowired
//    @Qualifier("withdrawTemplate")
//    private Template withdrawTemplate;
//    @Autowired
//    @Qualifier("transferTemplate")
//    private Template tranferTemplate;
//
//    @Autowired
//    @Qualifier("fullDf")
//    private DateFormat fullDf;
//
//    @Autowired
//    @Qualifier("partDf")
//    private DateFormat partDf;
//
//    //生成邮件内容
//    public String getEmailContext(String opType, Account account, double money, int toaccountid) {
//        String info;
//        //升级:引入策略模式 通过策略模式 将不同的操作类型
//        if (opType.equals("deposite")) {
//            info = depositeInfo(account, money);
//        } else if (opType.equals("withdraw")) {
//            info = withdrawInfo(account, money);
//        } else if (opType.equals("transfer")) {
//            info = transferInfo(account, money, toaccountid);
//        } else {
//            info = "";
//        }
//        return info;
//    }
    @Autowired
    private EmailStrategyFactory emailStrategyFactory;
    //使用策略模式    避免大量的if-else或switch-case语句    方面于代码的可维护性和可扩展性
    public String getEmailContext(String opType, Account account, double money, int toAccountId) {
        EmailStrategy strategy = emailStrategyFactory.getStrategy(opType);
        if (strategy != null) {
            return strategy.generateEmailContent(account, money, toAccountId);
        }
        return "";
    }
//
//    //生成转账邮件内容
//    private String transferInfo(Account account, double money, int toaccountid) {
//        Date d = new Date();
//        context.put("accountid", account.getAccountid());
//        context.put("email", account.getEmail());
//        context.put("subject", "存款操作通知");
//        context.put("optime", fullDf.format(d));
//        context.put("money", money);
//        context.put("balance", account.getBalance());
//        context.put("currentDate", partDf.format(d));
//        try {
//            StringWriter writer = new StringWriter(); //合并内容 替换占位符
//            tranferTemplate.merge(context, writer);         //从流获取最终的字符串
//            return writer.toString();
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        return "";
//    }
//
//    //生成取款邮件内容
//    private String withdrawInfo(Account account, double money) {
//        Date d = new Date();
//        context.put("accountid", account.getAccountid());
//        context.put("email", account.getEmail());
//        context.put("subject", "取款操作通知");
//        context.put("optime", fullDf.format(d));
//        context.put("money", money);
//        context.put("balance", account.getBalance());
//        context.put("currentDate", partDf.format(d));
//        try {
//            StringWriter writer = new StringWriter(); //合并内容 替换占位符
//            withdrawTemplate.merge(context, writer);         //从流获取最终的字符串
//            return writer.toString();
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        return "";
//    }
//
//    //生成存款邮件内容
//    private String depositeInfo(Account account, double money) {
//        Date d = new Date();
//        context.put("accountid", account.getAccountid());
//        context.put("email", account.getEmail());
//        context.put("subject", "存款操作通知");
//        context.put("optime", fullDf.format(d));
//        context.put("money", money);
//        context.put("balance", account.getBalance());
//        context.put("currentDate", partDf.format(d));
//        try {
//            StringWriter writer = new StringWriter(); //合并内容 替换占位符
//            depositTemplate.merge(context, writer);         //从流获取最终的字符串
//            return writer.toString();
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        return "";
//    }

}
